#include"sock.hpp"
#include<poll.h>

namespace Poll_etta
{
  class poll_sever
  {
    private:
      int listen_sock;
      unsigned short port;
    public:
      poll_sever(int _port):port(_port)
      {}
      //初始化
      void InitSever()
      {
         listen_sock=so_Sock::so_sock::Socket();
         so_Sock::so_sock::Bind(listen_sock,port);
         so_Sock::so_sock::Listen(listen_sock);
      }
      //RUN 任务
      void Run()
      {
        struct pollfd rfds[64];
        //初始化参数
        for(int i=0;i<64;i++)
        {
          rfds[i].fd=-1;
          rfds[i].events=0;   //我所关心的事件
          rfds[i].revents=0;  //操作系统对我关心的事件 做出回应
        }
        //填充我所关心的事件
        rfds[0].fd=listen_sock;
        rfds[0].events=POLLIN;//关心读事件
        rfds[0].revents=0;//内核填充
        for(; ;)
        {
          switch(poll(rfds,64,-1))
          {
            case 0:
              std::cout<<"time out"<<std::endl;
              break;
            case -1:
              std::cerr<<"poll error"<<std::endl;
              break;
            default:
            //处理逻辑,有事件到来
              for(int i=0;i<64;i++)
              {
                if(rfds[i].fd==-1)
                {
                  continue;
                }
                if(rfds[i].revents&POLLIN)
                {
                  //能accept吗  不能  要填充就绪事件
                  if(listen_sock==rfds[i].fd)
                  {
                    std::cout<<" get a new link"<<std::endl;
                  }
                  else 
                  {
                    //recv数据
                  }
                }
              }
              break;

          }
        }

      }
      ~poll_sever()
      {}
  };
}
